/**
 *====================================================
 * 文件名称: FinanceNoticeActionApi.java
 * 修订记录：
 * No    日期				作者(操作:具体内容)
 * 1.    2015年10月22日			chenxy(创建:创建文件)
 *====================================================
 * 类描述：(说明未实现或其它不应生成javadoc的内容)
 */
package com.yuexunit.finance.project.action.v1;

import java.math.BigDecimal;
import java.util.Date;

import com.yuexunit.finance.context.FinVersion1;
import com.yuexunit.finance.project.action.v1.model.output.DeliveryNoticeDetail;
import com.yuexunit.finance.project.action.v1.model.output.DeliveryNoticeLineInfo;
import com.yuexunit.finance.project.action.v1.model.output.RecieveNoticeDetail;
import com.yuexunit.finance.project.action.v1.model.output.RecieveNoticeInventory;
import com.yuexunit.finance.project.action.v1.model.output.SupervisionNoticeDetail;
import com.yuexunit.finance.project.action.v1.model.output.SupervisionNoticeLineInfo;
import com.yuexunit.finance.project.action.v1.model.output.TransportNoticeDetail;
import com.yuexunit.finance.project.action.v1.model.output.TransportNoticeLineInfo;
import com.yuexunit.page.PageCriteria;
import com.yuexunit.page.PageList;
import com.yuexunit.web.annotation.Action;
import com.yuexunit.web.annotation.Parameter;
import com.yuexunit.web.annotation.Permission;

/** 
 * @ClassName: FinanceNoticeActionApi 
 * @Description: TODO(这里用一句话描述这个类的作用) 
 * @author chenxy 
 * @date 2015年10月22日 下午3:23:13  
 */
public interface FinanceBulkstockNoticeActionApi {

	@Permission
	@Action(version = FinVersion1.class, description = "下达融资监管通知信息")
	@Parameter(name = "supervisionNoticeId", description = "监管通知ID")
	public String createSupervisionNotice(
			@Parameter(name = "financeId", description = "﻿融资信息ID") Long financeId,
			@Parameter(name = "noticeContent", description = "监管通知内容") String noticeContent
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "修改融资监管通知信息")
	public void updateSupervisionNotice(
			@Parameter(name = "supervisionNoticeId", description = "监管通知ID") Long supervisionNoticeId,
			@Parameter(name = "noticeContent", description = "监管通知内容") String noticeContent
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "接受融资监管通知(物流公司)")
	public void consentSupervisionNotice(
			@Parameter(name = "supervisionNoticeId", description = "监管通知ID") Long supervisionNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "拒绝融资监管通知(物流公司)")
	public void opposeSupervisionNotice(
			@Parameter(name = "supervisionNoticeId", description = "监管通知ID") Long supervisionNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "查看融资监管通知信息(监管通知)")
	public SupervisionNoticeDetail inquireSupervisionNoticeDetail(
			@Parameter(name = "supervisionNoticeId", description = "﻿监管通知ID") Long supervisionNoticeId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "查看融资监管通知信息")
	public SupervisionNoticeDetail inquireFinanceSupervisionNotice(
			@Parameter(name = "financeId", description = "﻿融资信息ID") Long financeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "物流公司查看融资监管通知信息列表")
	public PageList<SupervisionNoticeLineInfo> inquireSupervisionNoticePageList(
			@Parameter(name = "financeId", description = "﻿融资信息ID", nullable = true) Long financeId,
			@Parameter(name = "financeNumber", description = "﻿融资信息编号", nullable = true) String financeNumber,
			@Parameter(name = "noticeState", description = "通知状态 1:未确认/2:已确认/3:拒绝", nullable = true) Integer noticeState,
			@Parameter(name = "page", description = "分页参数") PageCriteria page
	);

	//====================================================================================================================================================//
	@Permission
	@Action(version = FinVersion1.class, description = "下发收货通知")
	@Parameter(name = "recieveNoticeId", description = "收货通知ID")
	public String createRecieveNotice(
			@Parameter(name = "financeId", description = "融资信息ID") Long financeId,
			@Parameter(name = "logisticsCompanyId", description = "物流公司ID") Long logisticsCompanyId,
			@Parameter(name = "logisticsCompanyName", description = "物流公司名称") String logisticsCompanyName,
			@Parameter(name = "noticeRemark", description = "收货通知说明", nullable = true) String noticeRemark,
			@Parameter(name = "bulkstockId", description = "融资货物ID", nullable = true) Long[] bulkstockIds,
			@Parameter(name = "quantity", description = "收货数量", nullable = true) BigDecimal[] quantities,
			@Parameter(name = "caseSize", description = "箱型尺寸", nullable = true) String[] caseSize,
			@Parameter(name = "caseQuantity", description = "箱量", nullable = true) Integer[] caseQuantities
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "通知仓储系统收货")
	public void createWareHouseRecieveNotice(
			@Parameter(name = "financeId", description = "融资ID") Long financeId,
			@Parameter(name = "enterpriseId", description = "物流企业ID") String enterpriseId,
			@Parameter(name = "bookingTime", description = "签订时间", nullable = true) Date bookingTime,
			@Parameter(name = "protocolNo", description = "协议号", nullable = true) String protocolNo,
			@Parameter(name = "wareHouseId", description = "入库仓库ID", nullable = true) String wareHouseId,
			@Parameter(name = "minControlValue", description = "最低控货值", nullable = true) BigDecimal minControlValue,
			@Parameter(name = "warningValue", description = "预警值", nullable = true) BigDecimal warningValue,
			@Parameter(name = "warningRate", description = "预警比例", nullable = true) BigDecimal warningRate,
			@Parameter(name = "bulkstockId", description = "融资货物ID", nullable = true) Long[] bulkstockIds,
			@Parameter(name = "quantity", description = "收货数量", nullable = true) BigDecimal[] quantities
	);
	
	@Permission
    @Action(version=FinVersion1.class, description="添加入库数据")
    public void createWareHouseInventory(
    		@Parameter(name="financeId", description="融资ID") Long financeId,
    		@Parameter(name="warehouseName", description="仓库名") String[] warehouseName,
    		@Parameter(name="wareHouseNumbers", description="入库单号") String[] wareHouseNumbers,
    		@Parameter(name="bulkstockInfoIds", description="大宗商品ID") Long[] bulkstockInfoIds, 
    		@Parameter(name="quantitys", description="数量") BigDecimal[] quantitys, 
    		@Parameter(name="weights", description="重量") BigDecimal[] weights, 
    		@Parameter(name="volumes", description="体积") BigDecimal[] volumes,
    		@Parameter(name="location_names", description="库位") String[] location_names,
    		@Parameter(name="location_areas", description="库区") String[] location_areas,
    		@Parameter(name="customerId", description="客户ID") String[] customerId,
    		@Parameter(name="location_id", description="库位ID") String[] location_id,
    		@Parameter(name="warehouseId", description="仓库ID") String[] warehouseId
    );

	
	@Action(version = FinVersion1.class, description = "拒绝收货-仓储系统")
	public void refuseWareHouseReceiveNotice(
			@Parameter(name = "financeId", description = "融资ID") Long financeId,
			@Parameter(name = "bulkstockId", description = "融资货物ID", nullable = true) Long[] bulkstockIds,
			@Parameter(name = "quantity", description = "收货数量", nullable = true) BigDecimal[] quantities
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "下发收货通知-物流公司自下发")
	@Parameter(name = "recieveNoticeId", description = "收货通知ID")
	public String createRecieveNoticeLogistics(
			@Parameter(name = "bulkstockInfoId", description = "大宗商品ID") Long[] bulkstockInfoId,
			@Parameter(name = "originPlace", description = "﻿产地") String[] originPlace,
			@Parameter(name = "quantity", description = "﻿数量") BigDecimal[] quantity,
			@Parameter(name = "weight", description = "﻿重量") BigDecimal[] weight,
			@Parameter(name = "volume", description = "﻿体积") BigDecimal[] volume,
			@Parameter(name = "bookingSpaceNumber", description = "﻿订舱单号", nullable = true) String bookingSpaceNumber
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "舱单类型-下发收货通知-再次理货(未收货的箱)/仓储类型-删除旧舱单 并返回通知锁定节点")
	@Parameter(name = "recieveNoticeId", description = "收货通知ID")
	public String createRepeatRecieveNotice(
			@Parameter(name = "financeId", description = "融资信息ID") Long financeId,
			@Parameter(name = "inventoryId", description = "货箱ID") Long[] inventoryId,
			@Parameter(name = "logisticsCompanyId", description = "物流公司ID", nullable = true) Long logisticsCompanyId,
			@Parameter(name = "logisticsCompanyName", description = "物流公司名称", nullable = true) String logisticsCompanyName,
			@Parameter(name = "noticeRemark", description = "收货通知说明", nullable = true) String noticeRemark
	);

	@Permission
	@Action(version = FinVersion1.class, description = "修改收货通知")
	public void updateRecieveNotice(
			@Parameter(name = "recieveNoticeId", description = "收货通知ID") Long recieveNoticeId,
			@Parameter(name = "logisticsCompanyId", description = "物流公司ID") Long logisticsCompanyId,
			@Parameter(name = "logisticsCompanyName", description = "物流公司名称") String logisticsCompanyName,
			@Parameter(name = "noticeRemark", description = "收货通知说明", nullable = true) String noticeRemark,
			@Parameter(name = "recieveNoticeDetailId", description = "收货通知货物明细ID", nullable = true) Long[] recieveNoticeDetailIds,
			@Parameter(name = "bulkstockId", description = "融资货物ID", nullable = true) Long[] bulkstockIds,
			@Parameter(name = "quantity", description = "收货数量", nullable = true) BigDecimal[] quantities,
			@Parameter(name = "caseSize", description = "箱型尺寸", nullable = true) String[] caseSizes,
			@Parameter(name = "caseQuantity", description = "箱量", nullable = true) Integer[] caseQuantities
	);

	@Permission
	@Action(version = FinVersion1.class, description = "取消收货通知")
	public void cancelRecieveNotice(
			@Parameter(name = "recieveNoticeId", description = "收货通知ID") Long recieveNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "确认收货通知")
	public void confirmRecieveNotice(
			@Parameter(name = "recieveNoticeId", description = "收货通知ID") Long recieveNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "完成收货通知")
	public void finishedRecieveNotice(
			@Parameter(name = "recieveNoticeId", description = "收货通知ID") Long recieveNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "查看收货通知信息(发货通知)")
	public RecieveNoticeDetail inquireRecieveNoticeDetail(
			@Parameter(name = "recieveNoticeId", description = "收货通知ID") Long recieveNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "查询收货通知列表")
	public PageList<RecieveNoticeDetail> inquireRecieveNoticePageList(
			@Parameter(name = "financeId", description = "﻿融资信息ID", nullable = true) Long financeId,
			@Parameter(name = "financeNumber", description = "﻿融资信息编号", nullable = true) String financeNumber,
			@Parameter(name = "noticeState", description = "通知状态 1:未确认/2:已确认/3:完成/4:取消", nullable = true) Integer noticeState,
			@Parameter(name = "enterpriseName", description = "融资企业", nullable = true) String enterpriseName,
			@Parameter(name = "bulkstockName", description = "货物名称", nullable = true) String bulkstockName,
			@Parameter(name = "productType", description = "业务类型", nullable = true) Integer productType,
			@Parameter(name = "page", description = "分页参数") PageCriteria page
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "查询收货通知列表-物流端")
	public PageList<RecieveNoticeDetail> inquireRecieveNoticeLogisticsPageList(
			@Parameter(name = "financeId", description = "﻿融资信息ID", nullable = true) Long financeId,
			@Parameter(name = "financeNumber", description = "﻿融资信息编号", nullable = true) String financeNumber,
			@Parameter(name = "noticeState", description = "通知状态 1:未确认/2:已确认/3:完成/4:取消", nullable = true) Integer noticeState,
			@Parameter(name = "page", description = "分页参数") PageCriteria page
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "删除新增理货信息")
	public void deleteReceivingTally(
			@Parameter(name = "recieveNoticeId", description = "﻿收货通知ID", nullable = true) Long recieveNoticeId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "查询收货通知货物列表")
	public PageList<RecieveNoticeInventory> inquireRecieveNoticeBulkstockPageList(
			@Parameter(name = "recieveNoticeId", description = "收货通知ID") Long recieveNoticeId,
			@Parameter(name = "page", description = "分页参数") PageCriteria page
	);

	//======================================================================================================================//
	@Permission
	@Action(version = FinVersion1.class, description = "下发运输通知")
	@Parameter(name = "transportNoticeId", description = "运输通知ID")
	public String createTransportNotice(
			@Parameter(name = "financeId", description = "融资信息ID") Long financeId,
			@Parameter(name = "financeNumber", description = "融资信息编号") String financeNumber,
			@Parameter(name = "logisticsCompanyId", description = "物流公司ID", nullable = true) Long logisticsCompanyId,
			@Parameter(name = "logisticsCompanyName", description = "物流公司名称", nullable = true) String logisticsCompanyName,
			@Parameter(name = "noticeRemark", description = "运输通知说明", nullable = true) String noticeRemark,
			@Parameter(name = "inventoryId", description = "货箱ID", nullable = true) Long[] inventoryIds
	);

	@Permission
	@Action(version = FinVersion1.class, description = "修改运输通知")
	public void updateTransportNotice(
			@Parameter(name = "transportNoticeId", description = "运输通知ID") Long transportNoticeId,
			@Parameter(name = "logisticsCompanyId", description = "物流公司ID", nullable = true) Long logisticsCompanyId,
			@Parameter(name = "logisticsCompanyName", description = "物流公司名称", nullable = true) String logisticsCompanyName,
			@Parameter(name = "noticeRemark", description = "运输通知说明", nullable = true) String noticeRemark,
			@Parameter(name = "inventoryId", description = "货箱ID", nullable = true) Long[] inventoryIds
	);

	@Permission
	@Action(version = FinVersion1.class, description = "取消运输通知")
	public void cancelTransportNotice(
			@Parameter(name = "transportNoticeId", description = "运输通知ID") Long transportNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "确认运输通知")
	public void confirmTransportNotice(
			@Parameter(name = "transportNoticeId", description = "运输通知ID") Long transportNoticeId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "完成运输通知")
	public void finishedTransportNotice(
			@Parameter(name = "transportNoticeId", description = "运输通知ID") Long transportNoticeId,
			@Parameter(name = "shipsName", description = "船名", nullable = true) String shipsName,
			@Parameter(name = "voyageNumber", description = "船次", nullable = true) String voyageNumber,
			@Parameter(name = "harborDateTime", description = "到港时间", nullable = true) Date harborDateTime,
			@Parameter(name = "harbor", description = "港口", nullable = true) String harbor,
			@Parameter(name = "fileUuid", description = "附件信息") String fileUuid
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "保存运输信息")
	public void saveTransportInfo(
			@Parameter(name = "inventoryId", description = "货箱ID") Long[] inventoryId,
			@Parameter(name = "shipsName", description = "船名") String shipsName,
			@Parameter(name = "voyageNumber", description = "船次") String voyageNumber,
			@Parameter(name = "harborDateTime", description = "到港时间") Date harborDateTime,
			@Parameter(name = "harbor", description = "港口") String harbor
	);

	@Permission
	@Action(version = FinVersion1.class, description = "查看运输通知信息(运输通知单)")
	public TransportNoticeDetail inquireTransportNoticeDetail(
			@Parameter(name = "recieveNoticeId", description = "运输通知ID") Long recieveNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "查询运输通知列表")
	public PageList<TransportNoticeLineInfo> inquireTransportNoticePageList(
			@Parameter(name = "financeId", description = "﻿融资信息ID", nullable = true) Long financeId,
			@Parameter(name = "financeNumber", description = "﻿融资信息编号", nullable = true) String financeNumber,
			@Parameter(name = "dateBegin", description = "﻿通知时间-开始", nullable = true) String dateBegin,
			@Parameter(name = "dateEnd", description = "﻿通知时间-结束", nullable = true) String dateEnd,
			@Parameter(name = "noticeState", description = "通知状态 1:未确认/2:已确认/3:完成/4:取消", nullable = true) Integer noticeState,
			@Parameter(name = "enterpriseName", description ="融资企业", nullable =true) String enterpriseName,
			@Parameter(name = "bulkstockName", description ="运输货物", nullable =true) String bulkstockName,
			@Parameter(name = "productType", description ="业务类型", nullable =true) Integer productType,
			@Parameter(name = "page", description = "分页参数") PageCriteria page
	);
	
	//======================================================================================================================//
	@Permission
	@Action(version = FinVersion1.class, description = "生成放货通知")
	@Parameter(name = "deliveryNoticeId", description = "放货通知ID")
	public String createDeliveryNotice(
			@Parameter(name = "pickupId", description = "提货申请单") Long pickupId,
			@Parameter(name = "inventoryId", description = "提货申请中的箱信息ID") Long[] inventoryId,
			@Parameter(name = "logisticsCompanyId", description = "物流公司ID") Long logisticsCompanyId,
			@Parameter(name = "noticeRemark", description = "﻿放货通知备注", nullable = true) String noticeRemark
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "一键放货")
	public void autoDeliveryInventory(
			@Parameter(name = "pickupId", description = "提货申请单") Long pickupId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "取消放货通知")
	public void cancelDeliveryNotice(
			@Parameter(name = "deliveryNoticeId", description = "放货通知ID") Long deliveryNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "确认放货通知")
	public void confirmDeliveryNotice(
			@Parameter(name = "deliveryNoticeId", description = "放货通知ID") Long deliveryNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "完成放货通知")
	public void finishedDeliveryNotice(
			@Parameter(name = "deliveryNoticeId", description = "放货通知ID") Long deliveryNoticeId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "获取放货通知明细(放货通知)")
	public DeliveryNoticeDetail inquireDeliveryNoticeDetail(
			@Parameter(name = "deliveryNoticeId", description = "放货通知ID") Long deliveryNoticeId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "查询放货通知列表")
	public PageList<DeliveryNoticeLineInfo> inquireDeliveryNoticePageList(
			@Parameter(name = "financeId", description = "﻿融资信息ID", nullable = true) Long financeId,
			@Parameter(name = "logisticsCompanyName", description = "﻿物流公司", nullable = true) String logisticsCompanyName,
			@Parameter(name = "financeNumber", description = "﻿融资编号", nullable = true) String financeNumber,
			@Parameter(name = "noticeState", description = "通知状态 1:未确认/2:已确认/3:完成/4:取消", nullable = true) Integer noticeState,
			@Parameter(name = "enterpriseName", description ="融资企业", nullable =true) String enterpriseName,
			@Parameter(name = "bulkstockName", description ="货物名称", nullable =true) String bulkstockName,
			@Parameter(name = "productType", description ="业务类型", nullable =true) Integer productType,
			@Parameter(name = "page", description = "分页参数") PageCriteria page
	);

}
